package com.zerdoor.dao;

import java.util.Map;

/**
 *
 * @描述 通用支付接口，该接口中包含充值，支付、钱包使用日志的记录等
 * Created by zhongjieyu on 2014/12/23.
 */
public interface ICommonPayDao {

    /**
     * 查询配置表数据（例如查询手续费比例、定金比例等）
     * @param configId 配置项ID
     * @return 返回比例百分比值
     * @throws Exception
     */
    float findScaleValue(int configId) throws Exception;


    /**
     * 记录用户钱包日志
     * @param param 参数项：{user_id,money,type,wallet_status}
     * @throws Exception
     */
    void addUser_wallet(Map<String,Object> param) throws Exception;


    /**
     * 根据用户ID和需要支付的金额查询余额是否足够,账户是否冻结
     * @param param 参数项：{user_id，sumPrice}
     * @return 如果等于空就表示账户余额不足或者账户被冻结
     * @throws Exception
     */
    Map<String,String> findUserWalletByUserId(Map<String,Object> param) throws Exception;


    /**
     * 扣款，根据用户ID 和支付金额，更新用户账户余额
     * @param param 参数项：{sumPrice,user_id}
     * @throws Exception
     */
    void updateDeductUserWalletByUserId(Map<String,Object> param) throws Exception;


    /**
     * 充值，根据用户ID 和充值金额，更新用户账户余额
     * @param param 参数项：{money,user_id}
     * @throws Exception
     */
    void updateChargeUserWalletByUserId(Map<String,Object> param) throws Exception;

    /**
     * 冻结金额，根据用户ID 和金额 更新用户冻结金额
     * @param param 参数项：{sumPrice,user_id}
     * @throws Exception
     */
    void updateFreezeUserWalletByUserId(Map<String,Object> param) throws Exception;

    /**
     * 查询用户账户余额
     * @param userId 用户ID
     * @return （总余额-冻结金额）
     * @throws Exception
     */
    float findUserWalletEnough(Integer userId) throws Exception;

    /**
     * 根据编号查出中奖等级
     * @param prizeId 获奖等级
     * @return
     */
    public Map<String, Object> getPrizeByPrizeId(int prizeId);

    /**
     * 根据艺术家编号查出用户编号
     * @param artistId
     * @return
     */
    public int getUserInfoByArtistId(int artistId);

    /**
     * 给艺术家钱包打钱
     * @param map
     * @throws Exception
     */
    public void updateArtistWallet(Map<String, Object> map) throws Exception;

    /**
     * 给发包方扣钱
     * @param map
     * @throws Exception
     */
    public void updateBailseWallet(Map<String, Object> map) throws Exception;

    /**
     * 根据任务订单ID维护任务订单表订单冻结金额信息
     * @param map
     * @throws Exception
     */
    void updateOrderTaskBlockedInfo(Map<String, Object> map) throws Exception;

    /**
     * 根据用户ID查询用户冻结金额
     * @param userId
     * @return
     * @throws Exception
     */
    float findFreezeMoneyByUserId(Integer userId) throws Exception;

    /**
     * 根据用户ID和支付金额扣除冻结金额和账户余额
     * @param param
     * @throws Exception
     */
    void updateFreezeMoneyByUserId(Map<String, Object> param) throws Exception;

    /**
     * 根据用户ID解冻用户冻结金额
     * @param param
     * @throws Exception
     */
    void updateThawFreezeMoneyByUserId(Map<String, Object> param) throws Exception;


    /**
     * 根据用户ID维护用户交易量数据
     * @param userId 用户ID
     * @throws Exception
     */
    void updateUserTradingNumByUserId(Integer userId) throws Exception;

}
